﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _12_Facade
{
    class Program
    {
        /*
         外观模式(Facade)：为子系统中的一组接口提供一个一致的界面，此模式定义了一个高层接口.这个接口使得这一子系统更加容易使用。

         使用：
          * 设计初期阶段： 应该要有意识的将不同的两个层分离，经典的三层架构，就需要考虑在数据访问层和业务逻辑层和表现层的层与层之
                间建立外观，这样可以为复杂的子系统提供一个简单的接口，降低耦合。

          * 开发阶段：子系统往往因为不断的重构演化而变得复杂，大多数的模式使用的时候也会产生很多很小的类，给调用者带来了使用上的困
                难，增加外观Facade 可以提供一个简单的接口，减少他们之间的依赖。

          * 维护遗留大型系统：在基于庞大复杂的旧系统上开发新系统的时候，通过为新系统开发一个外观Facade类，来提供设计粗糙或高度复杂
                的遗留代码比较清晰简单的接口，让新系统与Facade对象交互，Facade与遗留代码交互所有复杂的工作
        */
        static void Main(string[] args)
        {
            Facade facade = new Facade();
            facade.FacadeMethod();
            Console.WriteLine("外观者模式");
            Console.Read();
        }
    }
}
